import axios from 'axios'
import { useUserStore } from '@/stores'
import { ElMessage } from 'element-plus'

// 基地址
const baseURL = 'http://localhost:8080'
// 创建axios实例对象
const instance = axios.create({
  // 基地址和超时时间
  baseURL: baseURL,
  timeout: 30000,
})
// 请求拦截器
instance.interceptors.request.use(
  function (config) {
    // 携带请求头
    const useStore = useUserStore()
    if (localStorage.getItem('pinia_token') !== null) {
      config.headers['Authorization'] = useStore.token.value
      console.log('请求头携带token:', useStore.token.value)
    }
    return config
  },
  function (error) {
    return Promise.reject(error)
  },
)

// 响应拦截器
instance.interceptors.response.use(
  function (response) {
    // 响应成功且业务成功
    if (response.data.code === 200) {
      return response.data;
    }
    
    // 响应成功但业务失败
    const errorMessage = response.data?.message || '服务异常';
    ElMessage.error(errorMessage);
    return Promise.reject(response.data);
  },
  function (error) {
    // 401 认证错误处理
    if (error.response?.status === 401) {
      // 添加额外的清理逻辑（可选）
      localStorage.removeItem('token');
      store.commit('user/clearUserInfo');
      ElMessage.warning('登录已过期，请重新登录');
      router.push('/login');
    }
    
    // 安全获取错误信息
    let errorMessage = '请求失败';
    
    if (error.response) {
      // 尝试从不同位置获取错误消息
      errorMessage = error.response.data?.message || 
                    error.response.data?.msg || 
                    error.response.statusText || 
                    `HTTP错误 ${error.response.status}`;
    } else if (error.request) {
      // 请求已发出但无响应（网络错误）
      errorMessage = '网络错误，请检查连接';
    } else {
      // 请求配置错误或其他未知错误
      errorMessage = error.message || '未知错误';
    }
    
    ElMessage.error(errorMessage);
    
    // 开发环境记录完整错误
    if (process.env.NODE_ENV === 'development') {
      console.error('API请求错误:', error);
    }
    
    return Promise.reject(error);
  }
);

export default instance
